package com.dc.refactoring._2_在对象之间搬移特性._8_IntroduceLocalExtension;

import java.util.Date;
import java.util.Objects;

/**
 * Description:  引入本地扩展_包装器实现
 * @author: gdc
 * @date: 2020/11/15
 * @version 1.0
 */
// 【1】声明一个包装类
public class MfDateWrap {

    // 【2】添加目标对象作为引用
    private Date original;

    // 【3】构造函数，需要做简单的委托动作
    public MfDateWrap(Date date) {
        original = date;
    }


    // 【4】为原始类的所有函数提供委托函数
    // 【5】将函数搬移到新类中
    public Date nextDate() {
        return new Date(getTime() + 86400000);
    }

    public long getTime() {
        return original.getTime();
    }

    public boolean equalsDate(Object o) {
        return original.equals(o);
    }


    // 【6】需要重写 equals和hashCode 方法
    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        MfDateWrap that = (MfDateWrap) o;
        return Objects.equals(original, that.original);
    }

    @Override
    public int hashCode() {
        return Objects.hash(original);
    }
}
